package models

import (
	"encoding/json" // 导入 encoding/json 包

	"gorm.io/datatypes" // 导入 gorm datatypes
)

// MQConfig 存储消息队列插件的配置信息
type MQConfig struct {
	*GormModel                 // 嵌入基础模型 (Id uint PK, CreatedAt, UpdatedAt, DeletedAt)
	PluginType  string         `gorm:"type:varchar(50);not null;comment:插件类型，如 rabbitmq, kafka, nsq, rocketmq, redis, channel_queue" json:"plugin_type"` // 插件类型，添加唯一索引和注释
	BrokerURLs  string         `gorm:"type:text;not null;comment:Broker 地址，多个用逗号分隔" json:"broker_urls"`                                                  // Broker 地址
	GroupName   string         `gorm:"type:varchar(100);default:'';comment:通用的组名，如 RocketMQ 的生产者/消费者组名、Kafka 的消费组名" json:"group_name"`                   // 通用的组名
	ExtraConfig datatypes.JSON `gorm:"type:json;comment:存储特定 MQ 插件的额外 JSON 配置" json:"extra_config"`                                                      // 存储不同 MQ 插件特有的配置，使用 datatypes.JSON
	IsActive    bool           `gorm:"not null;default:true;index;comment:是否启用该配置" json:"is_active"`                                                     // 是否启用
	Description string         `gorm:"type:varchar(255);comment:配置描述" json:"description"`                                                                // 配置描述
}

// TableName 自定义表名
func (MQConfig) TableName() string {
	return "mq_configs"
}

// ReqMQConfig 用于创建和更新请求的结构体
type ReqMQConfig struct {
	PluginType  string          `json:"plugin_type" binding:"required"`
	BrokerURLs  string          `json:"broker_urls" `
	GroupName   string          `json:"group_name" binding:"required"` // 可选
	ExtraConfig json.RawMessage `json:"extra_config"`                  // 接收原始 JSON
	IsActive    *bool           `json:"is_active"`                     // 使用指针以区分未提供和 false
	Description string          `json:"description"`                   // 可选
}
